package com.jfinal.weixin.sdk.api;

import com.jfinal.kit.Kv;
import com.jfinal.weixin.sdk.utils.HttpUtils;
import com.jfinal.weixin.sdk.utils.JsonUtils;

/**
 * Created by mason on 17-11-14.
 * 图文消息评论
 */
public class CommentApi {
    private static String openUrl = "https://api.weixin.qq.com/cgi-bin/comment/open?access_token=";

    /**
     * 打开已群发文章评论
     * @param msg_data_id 群发返回的msg_data_id
     * @param index 多图文时，用来指定第几篇图文，从0开始，不带默认操作该msg_data_id的第一篇图文
     * @return ApiResult
     */
    public static ApiResult open(Long msg_data_id, Integer index) {
        Kv params = Kv.by("msg_data_id", msg_data_id);
        if (index != null) {
            params.set("index", index);
        }
        String jsonResult = HttpUtils.post(openUrl + AccessTokenApi.getAccessTokenStr(), JsonUtils.toJson(params));
        return new ApiResult(jsonResult);
    }

    private static String closeUrl = "https://api.weixin.qq.com/cgi-bin/comment/close?access_token=";

    /**
     * 关闭已群发文章评论
     * @param msg_data_id 群发返回的msg_data_id
     * @param index 多图文时，用来指定第几篇图文，从0开始，不带默认操作该msg_data_id的第一篇图文
     * @return ApiResult
     */
    public static ApiResult close(Long msg_data_id, Integer index) {
        Kv params = Kv.by("msg_data_id", msg_data_id);
        if (index != null) {
            params.set("index", index);
        }
        String jsonResult = HttpUtils.post(closeUrl + AccessTokenApi.getAccessTokenStr(), JsonUtils.toJson(params));
        return new ApiResult(jsonResult);
    }

    private static String listUrl = "https://api.weixin.qq.com/cgi-bin/comment/list?access_token=";

    /**
     * 查看指定文章的评论数据
     * @param msg_data_id 群发返回的msg_data_id
     * @param index 多图文时，用来指定第几篇图文，从0开始，不带默认返回该msg_data_id的第一篇图文
     * @param begin 起始位置
     * @param count 获取数目（>=50会被拒绝）
     * @param type type=0 普通评论&精选评论, type=1 普通评论, type=2 精选评论
     * @return ApiResult
     */
    public static ApiResult list(Long msg_data_id, Integer index, int begin, int count, int type) {
        Kv params = Kv.by("msg_data_id", msg_data_id);
        if (index != null) {
            params.set("index", index);
        }
        params.set("begin", begin).set("count", count).set("type", type);
        String jsonResult = HttpUtils.post(listUrl + AccessTokenApi.getAccessTokenStr(), JsonUtils.toJson(params));
        return new ApiResult(jsonResult);
    }

    private static String markelectUrl = "https://api.weixin.qq.com/cgi-bin/comment/markelect?access_token=";

    /**
     * 将评论标记精选
     * @param msg_data_id 群发返回的msg_data_id
     * @param index 多图文时，用来指定第几篇图文，从0开始，不带默认操作该msg_data_id的第一篇图文
     * @param user_comment_id 用户评论id
     * @return ApiResult
     */
    public static ApiResult markelect(Long msg_data_id, Integer index, Long user_comment_id) {
        return mark(markelectUrl, msg_data_id, index, user_comment_id);
    }

    private static String unmarkelectUrl = "https://api.weixin.qq.com/cgi-bin/comment/unmarkelect?access_token=";

    /**
     * 将评论取消精选
     * @param msg_data_id 群发返回的msg_data_id
     * @param index 多图文时，用来指定第几篇图文，从0开始，不带默认操作该msg_data_id的第一篇图文
     * @param user_comment_id 用户评论id
     * @return ApiResult
     */
    public static ApiResult unmarkelect(Long msg_data_id, Integer index, Long user_comment_id) {
        return mark(unmarkelectUrl, msg_data_id, index, user_comment_id);
    }

    private static ApiResult mark(String url, Long msg_data_id, Integer index, Long user_comment_id) {
        Kv params = Kv.by("msg_data_id", msg_data_id);
        if (index != null) {
            params.set("index", index);
        }
        params.set("user_comment_id", user_comment_id);
        String jsonResult = HttpUtils.post(url + AccessTokenApi.getAccessTokenStr(), JsonUtils.toJson(params));
        return new ApiResult(jsonResult);
    }

    private static String deleteUrl = "https://api.weixin.qq.com/cgi-bin/comment/delete?access_token=";

    /**
     * 删除评论
     * @param msg_data_id 群发返回的msg_data_id
     * @param index 多图文时，用来指定第几篇图文，从0开始，不带默认操作该msg_data_id的第一篇图文
     * @param user_comment_id 用户评论id
     * @return ApiResult
     */
    public static ApiResult delete(Long msg_data_id, Integer index, Long user_comment_id) {
        return mark(deleteUrl, msg_data_id, index, user_comment_id);
    }

    private static String replyAddUrl = "https://api.weixin.qq.com/cgi-bin/comment/reply/add?access_token=";

    /**
     * 回复评论
     * @param msg_data_id 群发返回的msg_data_id
     * @param index 多图文时，用来指定第几篇图文，从0开始，不带默认操作该msg_data_id的第一篇图文
     * @param user_comment_id 用户评论id
     * @param content 回复内容
     * @return ApiResult
     */
    public static ApiResult addReply(Long msg_data_id, Integer index, Long user_comment_id, String content) {
        Kv params = Kv.by("msg_data_id", msg_data_id);
        if (index != null) {
            params.set("index", index);
        }
        params.set("user_comment_id", user_comment_id).set("content", content);
        String jsonResult = HttpUtils.post(replyAddUrl + AccessTokenApi.getAccessTokenStr(), JsonUtils.toJson(params));
        return new ApiResult(jsonResult);
    }

    private static String replyDeleteUrl = "https://api.weixin.qq.com/cgi-bin/comment/reply/delete?access_token=";

    /**
     * 删除回复
     * @param msg_data_id 群发返回的msg_data_id
     * @param index 多图文时，用来指定第几篇图文，从0开始，不带默认操作该msg_data_id的第一篇图文
     * @param user_comment_id 评论id
     * @return ApiResult
     */
    public static ApiResult deleteReply(Long msg_data_id, Integer index, Long user_comment_id) {
        return mark(replyDeleteUrl, msg_data_id, index, user_comment_id);
    }
}
